home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
BORL_TIP
/
TI100
/
TI545.ASC
< prev
next >
Wrap
Text File
|
1992-09-03
|
8KB
|
331 lines
PRODUCT : TURBO PASCAL NUMBER : 545
VERSION : 4.0, 5.0, AND 5.5
OS : PC-DOS 3.0 or later, MS-DOS 3.0 or later
DATE : September 3, 1992 PAGE : 1/5
TITLE : FILES OPEN EXTEND
The following is public domain information that has been uploaded
to our Forum on CompuServe. As a courtesy to our users that do
not have immediate access to CompuServe, Technical Support
distributes these routines free of charge.
However, because these routines are public domain programs, not
developed by Borland International, we are unable to provide any
technical support or assistance using these routines. If you need
assistance using these routines, or are experiencing
difficulties, we recommend that you log onto CompuServe and
request assistance from the Forum members that developed these
routines.
The following unit extends the maximum number of files that can
be open simultaneously from 20 to 255. Files in DOS 2.0 or later
are controlled by file handles. The number of file handles
available to application programs is controlled by the FILES
environment variable stored in a CONFIG.SYS file. If no FILES
variable is established in a CONFIG.SYS file, then only 8 file
handles are available. However, DOS requires 5 file handles for
its own use (controlling devices such as CON, AUX, PRN, etc).
This le
aves only 3 handles for use by application programs.
By specifying a value for the FILES environment variable, you can
increase the number of possible file handles from 8 up to 20.
Since DOS still requires 5, 15 are left for application programs.
But you cannot normally increase the number of handles beyond 20.
With DOS version 3.0, a new DOS function was added to increase
the number of file handles available. However, the function must
be called from application programs that have previously reserved
space for the new file handles.
The unit EXTEND, described below, resizes the amount of allocated
memory for a Turbo Pascal program to allow space for new file
handles. In doing so, it also resizes the heap by adjusting the
value of FreePtr, the pointer used in FreeList management. Since
the FreeList is being manipulated, the heap must be empty when
the EXTEND unit is initialized. This can be guaranteed by
PRODUCT : TURBO PASCAL NUMBER : 545
VERSION : 4.0, 5.0, AND 5.5
OS : PC-DOS 3.0 or later, MS-DOS 3.0 or later
DATE : September 3, 1992 PAGE : 2/5
TITLE : FILES OPEN EXTEND
including EXTEND as one of the first units in your program's USES
statement. If any heap has been allocated when EXTEND initialize
s, the program will halt with an error message.
Notice that the interface section of the EXTEND unit is empty.
The initialization section of the unit takes care of the unit's
entire function. Other than including EXTEND in a program's USES
statement, no other operation need be preformed.
Before using EXTEND, you must specify a FILES variable in the
CONFIG.SYS file such as the following:
FILES = 255
Refer to your DOS User's Guide for more information regarding the
CONFIG.SYS file and the FILES variable.
The unit EXTEND is set up for 255 file handles. You can reduce
this number by changing the HANDLES constant in the unit's source
code and reducing the number specified for the FILES environment
variable.
unit Extend;
{This extends the number of file handles from 20 to 255}
{DOS requires 5 for itself. Applications can use up to 250}
interface
implementation
uses dos;
const
Handles =255;
{You can reduce the value passed to Handles if fewer files}
{are required.}
var
reg:registers;
begin
{Check the Dos Version}
{This technique only works for DOS 3.0 or later}
reg.ah:=$30;
PRODUCT : TURBO PASCAL NUMBER : 545
VERSION : 4.0, 5.0, AND 5.5
OS : PC-DOS 3.0 or later, MS-DOS 3.0 or later
DATE : September 3, 1992 PAGE : 3/5
TITLE : FILES OPEN EXTEND
MsDos(reg);
if reg.al<3 then
begin
writeln('Extend Unit Require DOS 3.0 or greater');
halt(1);
end;
{Reset the FreePtr}
{This reduces the heap space used by Turbo
Pascal}
if Ofs(FreePtr^)<>0 then
{Checks to see if the Heap is empty}
begin
write('Heap must be empty before Extend unit
initializes');
writeln;
halt(1);
end;
FreePtr:=ptr(Seg(FreePtr^)-(Handles div 8 +1), Ofs(FreePtr^));
{Determine how much memory is allocated to
program}
{Reg.Bx will return how many paragraphs used by program}
reg.ah:=$4A;
reg.es:=PrefixSeg;
reg.bx:=$FFFF;
msdos(reg);
{Set the program size to the allow for new
handles}
reg.ah:=$4A;
reg.es:=PrefixSeg;
reg.bx:=reg.bx-(Handles div 8 +1);
msdos(reg);
{Error when a Block Size is not appropriate}
if (reg.flags and 1)=1 then
begin
Writeln('Runtime Error ',reg.ax);
Writeln('In the Extend Unit');
halt(1);
end;
PRODUCT : TURBO PASCAL NUMBER : 545
VERSION : 4.0, 5.0, AND 5.5
OS : PC-DOS 3.0 or later, MS-DOS 3.0 or later
DATE : September 3, 1992 PAGE : 4/5
TITLE : FILES OPEN EXTEND
{Allocate Space for Additional Handles}
reg.ah:=$67;
reg.bx:=Handles;
MsDos(reg);
end.
Write the following program to a separate file. This program
tests the extend unit. This test should be done on systems
equipped with a hard disk.
program TestEx;
uses extend;
type
filearray=array[1..250] of text;
var
f:^filearray;
i:integer;
s:string;
begin
{Allocate Space for File Variable Table}
new(f);
{Open 250 files simultaneously}
for i:=1 to 250 do
begin
str(i,s);
Assign(f^[i],'Dum'+s+'.txt');
rewrite(f^[i]);
writeln('Open #',s);
end;
{Write some text to the files}
for i:=1 to 250 do
write(f^[i],'This is a test file');
{Close the files}
for i:=1 to 250 do
begin
close(f^[i]);
writeln('Closing #',i);
end;
{Erase the files}
PRODUCT : TURBO PASCAL NUMBER : 545
VERSION : 4.0, 5.0, AND 5.5
OS : PC-DOS 3.0 or later, MS-DOS 3.0 or later
DATE : September 3, 1992 PAGE : 5/5
TITLE : FILES OPEN EXTEND
for i:=1 to 250 do
begin
erase(f^[i]);
writeln('Erasing #',i);
end;
end.
DISCLAIMER: You have the right to use this technical information
subject to the terms of the No-Nonsense License Statement that
you received with the Borland product to which this information
pertains.